package com.pizza;

/**
 * @author SnowmanAndBee
 * @version <version>
 * 所有pizza店都要继承这个类，这个类也就是工厂
 * @date 2021/12/15 - 17:40
 */
public abstract class PizzaStore {
    /**
     * 规定pizza制作流程，管理pizza的创建
     * @param type 想制作的pizza的类型
     * @return 创建好的指定的pizza对象
     */
    public Pizza orderPizza(String type) {
        Pizza pizza;

        //虽然在此处调用，但真正的实现是由继承它的实体pizza实现，把控制权交给了子类
        pizza = createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;
    }

    /**
     * 创建pizza，每一个实体pizza店都要实现此方法来确定本店的pizza风味
     * @param type 指定创建的类型，工厂方法可以有也可以没有参数来指定产品
     * @return 返回实体店创建的有当地特色的pizza对象
     */
    abstract Pizza createPizza(String type);

    //其他方法
}
